﻿#include<iostream>
#include<stdio.h>
using namespace std;
#include <iostream>
using namespace std;
// 全缺省
void Func1(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl << endl;
}
// 半缺省
void Func2(int a, int b = 10, int c = 20)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl << endl;
}
int main()
{
	Func1();
	Func1(1);
	Func1(1, 2);
	Func1(1, 2, 3);
	Func2(100);
	Func2(100, 200); 
	Func2(100, 200, 300);
	return 0;
}
//void Func(int a = 0)
//{
//	cout << a << endl;
//}
//int main()
//{
//	Func();
//	// 没有传参时，使⽤参数的默认值
//	Func(10);
//	// 传参时，使⽤指定的实参
//	return 0;
//}
//#include<iostream>
//using namespace std;
//int main()
//{
//	// 在io需求⽐较⾼的地⽅，如部分⼤量输⼊的竞赛题中，加上以下3⾏代码
//	// 可以提⾼C++IO效率
//	ios_base::sync_with_stdio(false);
//	cin.tie(nullptr);
//	cout.tie(nullptr);
//	return 0;
//}
//#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//using namespace std;
//int main()
//{
//	int a = 0;
//	double b = 0.1;
//	char c = 'x';
//	cout << a << " " << b << " " << c << endl;
//	std::cout << a << " " << b << " " << c << std::endl;
//	scanf("%d%lf", &a, &b);
//	printf("%d %lf\n", a, b);
//	// 可以⾃动识别变量的类型
//	cin >> a;
//	cin >> b >> c;
//	cout << a << endl;
//	cout << b << " " << c << endl;
//	return 0;
//}
//namespace bit
//{
//	int a = 0;
//	int b = 1;
//}
//int main()
//{
//	// 编译报错：error C2065: “a”: 未声明的标识符
//	printf("%d\n", a);
//	return 0;
//}
// 指定命名空间访问
//int main()
//{
//	printf("%d\n", N::a);
//	return 0;
//}
//// using将命名空间中某个成员展开
//using N::b;
//int main()
//{
//	printf("%d\n", N::a);
//	printf("%d\n", b);
//	return 0;
//}
//// 展开命名空间中全部成员
//using namespce N;
//int main()
//{
//	printf("%d\n", a);
//	printf("%d\n", b);
//	return 0;
//}
//using namespace std;
//#include <stdio.h>
//#include <stdio.h>
//#include <stdlib.h>
//#include <stdio.h>
//#include <stdlib.h>
////2. 命名空间可以嵌套
//namespace bit
//{
//	//zhangsan
//	namespace zhangsan
//	{
//		int rand = 1;
//		int Add(int left, int right)
//		{
//			return left + right;
//		}
//	}
//	// lisi
//	namespace lisi
//	{
//		int rand = 2;
//		int Add(int left, int right)
//		{
//			return (left + right) * 10;
//		}
//	}
//}
//int main()
//{
//	printf("%d\n", bit::zhangsan::rand);
//	printf("%d\n", bit::lisi::rand);
//	printf("%d\n", bit::zhangsan::Add(1, 2));
//	printf("%d\n", bit::lisi::Add(1, 2));
//	return 0;
//}
// 1. 正常的命名空间定义
// bit是命名空间的名字，⼀般开发中是⽤项⽬名字做命名空间名。
// 我们上课⽤的是bit，⼤家下去以后⾃⼰练习可以考虑⽤⾃⼰名字缩写，如张三：zs
//namespace bit
//{
//	// 命名空间中可以定义变量/函数/类型
//	int rand = 10;
//	int Add(int left, int right)
//	{
//		return left + right;
//	}
//	struct Node
//	{
//		struct Node* next;
//		int val;
//	};
//}
//
//int main()
//{
//	// 这⾥默认是访问的是全局的rand函数指针
//	printf("%p\n", rand);
//	// 这⾥指定bit命名空间中的rand
//	printf("%d\n", bit::rand);
//	return 0;
//}
//int rand = 10;
//int main()
//{
//	// 编译报错：error C2365: “rand”: 重定义；以前的定义是“函数”
//	printf("%d\n", rand);
//	return 0;
//}
//int main()
//{
//	cout << "hello world" << endl;
//	return 0;
//}